package com.ruoyi.course.mapper;

import com.ruoyi.course.domain.CourseSchedule;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 课程安排Mapper接口
 * 
 * @author ruoyi
 * @date 2025-06-12
 */
@Mapper
public interface CourseScheduleMapper 
{
    /**
     * 查询课程安排
     * 
     * @param scheduleId 课程安排主键
     * @return 课程安排
     */
    public CourseSchedule selectCourseScheduleByScheduleId(Long scheduleId);

    /**
     * 查询课程安排列表
     * 
     * @param courseSchedule 课程安排
     * @return 课程安排集合
     */
    public List<CourseSchedule> selectCourseScheduleList(CourseSchedule courseSchedule);

    /**
     * 新增课程安排
     * 
     * @param courseSchedule 课程安排
     * @return 结果
     */
    public int insertCourseSchedule(CourseSchedule courseSchedule);

    /**
     * 修改课程安排
     * 
     * @param courseSchedule 课程安排
     * @return 结果
     */
    public int updateCourseSchedule(CourseSchedule courseSchedule);

    /**
     * 删除课程安排
     * 
     * @param scheduleId 课程安排主键
     * @return 结果
     */
    public int deleteCourseScheduleByScheduleId(Long scheduleId);

    /**
     * 批量删除课程安排
     * 
     * @param scheduleIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteCourseScheduleByScheduleIds(Long[] scheduleIds);

    /**
     * 根据班级ID查询课程安排列表
     * 
     * @param claId 班级ID
     * @return 课程安排集合
     */
    public List<CourseSchedule> selectCourseScheduleByClaId(Long claId);

    /**
     * 检查时间冲突
     * 
     * @param claId 班级ID
     * @param specificDate 具体日期
     * @param timePeriod 时间段
     * @return 冲突的课程安排列表
     */
    public List<CourseSchedule> checkTimeConflict(@Param("claId") Long claId, @Param("specificDate") String specificDate, @Param("timePeriod") String timePeriod);

    /**
     * 检查模板课程冲突
     * 
     * @param claId 班级ID
     * @param weekDay 星期几
     * @param timePeriod 时间段
     * @return 冲突的课程安排列表
     */
    public List<CourseSchedule> checkTemplateConflict(@Param("claId") Long claId, @Param("weekDay") String weekDay, @Param("timePeriod") String timePeriod);

    /**
     * 批量插入课程安排
     * 
     * @param scheduleList 课程安排列表
     * @return 结果
     */
    public int batchInsertCourseSchedule(List<CourseSchedule> scheduleList);

    /**
     * 假删除课程安排（更新状态为CANCELLED）
     * 
     * @param scheduleId 课程安排ID
     * @return 结果
     */
    public int softDeleteCourseSchedule(Long scheduleId);

    /**
     * 根据班级ID和状态查询课程安排
     * 
     * @param claId 班级ID
     * @param status 状态
     * @return 课程安排集合
     */
    public List<CourseSchedule> selectCourseScheduleByClaIdAndStatus(@Param("claId") Long claId, @Param("status") String status);
}
